localeconv関数は、現在のロケールの数値書式に関する詳細情報を取得します。
この情報は、lconv型の構造体に格納されます。
#include <locale.h>
struct lconv *localeconv( void );
引数はありません。
戻り値として、lconv型の構造体のポインタが返されます。
このポインタの指すメモリは関数内で確保されるため、実体を準備する必要はありません。
lconv型の構造体のメンバを以下に記載します。
これらの値は、以降の処理で書き換えられる可能性があるため、直接変更しないでください。
char *decimal_point | 通貨以外の数値で使用する小数点の文字 |
---|---|
char *thousands_sep | 通貨以外の数値で使用する整数部の桁を区切る文字 |
char *grouping | 通貨以外の数値の区切りを入れる桁数を示す値の入った配列
以下の値をとります。 「CHAR_MAX」: 区切りをいれません。 「0」: 残りの各桁の区切りは直前の要素の桁数を使用します。 「n」(1以上): 区切りを入れる桁数。 |
char *int_curr_symbol | 国際通貨記号
以下の規則に則って解釈します。 ・最初の3文字は、ISO4217規格で定義されている英字の国際通貨記号 ・4番目の文字(NULL文字の直前にある文字)は、国際通貨記号と通貨値を区切る記号 |
char *currency_symbol | 通貨記号 |
char *mon_decimal_point | 通貨で使用する小数点の文字 |
char *mon_thousands_sep | 通貨で使用する整数部の数字の桁を区切る文字 |
char *mon_grouping | 通貨の区切りを入れる桁数を示す値の入った配列
以下の値をとります。 「CHAR_MAX」: 区切りをいれません。 「0」: 残りの各桁の区切りは直前の要素の桁数を使用します。 「n」(1以上): 区切りを入れる桁数。 |
char *positive_sign | 0及び正の通貨値の、符号を示す文字列 |
char *negative_sign | 負の通貨値の、符号を表す文字列 |
char int_frac_digits | 国際的な通貨書式の小数部の桁数 |
char frac_digits | 通貨書式の小数部の桁数 |
char p_cs_precedes | 通貨記号が、
0及び正の通貨値の前にある場合は「1」 0及び正の通貨値の後ろにある場合は「0」 |
char p_sep_by_space | 通貨記号と0及び正の通貨値が、
空白で区切られている場合は「1」 空白で区切られていない場合は「0」 |
char n_cs_precedes | 通貨記号が、
負の通貨値の前にある場合は「1」 負の通貨値の後ろにある場合は「0」 |
char n_sep_by_space | 通貨記号と負の通貨値が、
空白で区切られている場合は「1」 空白で区切られていない場合は「0」 |
char p_sign_posn | 0及び正の通貨書式の符号の位置
以下の値をとります。 「0」: 数値と通貨記号をかっこで囲む 「1」: 符号文字列が、数値と通貨記号の前にある 「2」: 符号文字列が、数値と通貨記号の後ろにある 「3」: 符号文字列が、通貨記号の直前にある 「4」: 符号文字列が、通貨記号の直後にある |
char n_sign_posn | 負の通貨書式の符号の位置
以下の値をとります。 「0」: 数値と通貨記号をかっこで囲む 「1」: 符号文字列が、数値と通貨記号の前にある 「2」: 符号文字列が、数値と通貨記号の後ろにある 「3」: 符号文字列が、通貨記号の直前にある 「4」: 符号文字列が、通貨記号の直後にある |
※char * 型メンバは文字ではなく文字列へのポインタです。また、char *decimal_point以外で ” に等しいメンバは、長さが0か、現在のロケールでサポートされていないものです。
※構造体の char型メンバは、0以上の数値を表しますが、CHAR_MAXと等しいメンバがあった場合、そのメンバは現在のロケールでサポートされていないことを示しています。
プログラム 例
#include <stdio.h> #include <locale.h> int main(void) { char *loc; struct lconv *stLc; /* ロケール情報を'jpn'(日本)に設定し、取得 */ loc = setlocale(LC_ALL, 'jpn'); printf('locale = %sn', loc); /* ロケールに関する詳細情報を取得 */ stLc = localeconv(); printf(' decimal_point = %sn', stLc->decimal_point); printf(' thousands_sep = %sn', stLc->thousands_sep); printf(' grouping[0] = %dn', stLc->grouping[0]); printf(' grouping[1] = %dn', stLc->grouping[1]); printf(' int_curr_symbol = %sn', stLc->int_curr_symbol); printf(' currency_symbol = %sn', stLc->currency_symbol); printf(' mon_decimal_point = %sn', stLc->mon_decimal_point); printf(' mon_thousands_sep = %sn', stLc->mon_thousands_sep); printf(' mon_grouping[0] = %dn', stLc->mon_grouping[0]); printf(' mon_grouping[1] = %dn', stLc->mon_grouping[1]); printf(' positive_sign = %sn', stLc->positive_sign); printf(' negative_sign = %sn', stLc->negative_sign); printf(' int_frac_digits = %dn', stLc->int_frac_digits); printf(' frac_digits = %dn', stLc->frac_digits); printf(' p_cs_precedes = %dn', stLc->p_cs_precedes); printf(' p_sep_by_space = %dn', stLc->p_sep_by_space); printf(' n_cs_precedes = %dn', stLc->n_cs_precedes); printf(' n_sep_by_space = %dn', stLc->n_sep_by_space); printf(' n_sign_posn = %dn', stLc->n_sign_posn); printf('n'); /* ロケール情報を'us'(米国)に設定し、取得 */ loc = setlocale(LC_ALL, 'us'); printf('locale = %sn', loc); /* ロケールに関する詳細情報を取得 */ stLc = localeconv(); printf(' int_curr_symbol = %sn', stLc->int_curr_symbol); printf(' currency_symbol = %sn', stLc->currency_symbol); /* 他メンバは抜粋します */ return 0; }
例の実行結果
> localeconv.exe locale = Japanese_Japan.932 decimal_point = . thousands_sep = , grouping[0] = 3 grouping[1] = 0 int_curr_symbol = JPY currency_symbol = mon_decimal_point = . mon_thousands_sep = , mon_grouping[0] = 3 mon_grouping[1] = 0 positive_sign = negative_sign = - int_frac_digits = 2 frac_digits = 0 p_cs_precedes = 1 p_sep_by_space = 0 n_cs_precedes = 1 n_sep_by_space = 0 n_sign_posn = 3 locale = English_United States.1252 int_curr_symbol = USD currency_symbol = $
※Windows環境でのみ動作確認しております。LINUX環境などでは動作が異なる場合がありますので、その場合は環境に合わせてカスタマイズしてください。
Copyright © 2011 katsumi Handa All Rights Reserved.